<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>鼠标移入，文字加下划线</title>
  </head>
  <body>
    <div class="box">
      <div class="text">hello world</div>
      <div class="imgText">
        <img src="https://www.euweb.cn/wp-content/uploads/2016/12/302636-106.jpg" alt="" />
        <div>鼠标移动到图片，文字显示下划线</div>
      </div>
    </div>
  </body>

  <style>
    .box {
      margin: 100px auto;
    }

    .text {
      /* 防止下滑线变为跟外面盒子一样长度 */
      display: inline-block;
      font-size: 20px;
      position: relative; /* 相对定位 */
      left: 46%;
      cursor: pointer; /* 鼠标悬停时显示手型光标 */
    }

    .text::after {
      content: '';
      position: absolute; /* 绝对定位 */
      left: 0;
      bottom: 0; /* 下划线位置 */
      width: 100%; /* 下划线宽度 */
      height: 2px; /* 下划线高度 */
      background-color: red; /* 下划线颜色 */
      transform: scaleX(0); /* 初始状态为 0 */
      transform-origin: left; /* 动画起点设置为左侧，默认为中间展开 */
      transition: transform 0.3s ease-in-out; /* 过渡效果 */
    }

    .text:hover::after {
      transform: scaleX(1); /* 鼠标悬停时展开到 100% */
    }

    .imgText {
      width: 500px;
      margin: 100px auto;
      text-align: center; /* 使内容居中 */
    }

    img {
      max-width: 500px; /* 图片自适应容器宽度 */
      height: auto; /* 保持图片比例 */
    }

    .imgText div {
      display: inline-block;
      font-size: 20px; /* 字体大小 */
      position: relative; /* 相对定位 */
      cursor: pointer; /* 鼠标悬停时显示手型光标 */
    }

    .imgText div::after {
      content: '';
      position: absolute; /* 绝对定位 */
      left: 0;
      bottom: -2px; /* 下划线位置 */
      width: 100%; /* 下划线宽度 */
      height: 2px; /* 下划线高度 */
      background-color: red; /* 下划线颜色 */
      transform: scaleX(0); /* 初始状态为 0 */
      transform-origin: left; /* 动画起点设置为左侧 */
      transition: transform 0.3s ease-in-out; /* 过渡效果 */
    }

    .imgText:hover div::after {
      transform: scaleX(1); /* 鼠标悬停时展开到 100% */
    }
  </style>
</html>
